package com.vote.business.mapper;

import com.vote.business.domain.vo.HotVoteTopVO;
import com.vote.business.domain.vo.VoteOptionRatioVO;
import com.vote.business.domain.vo.VoteStatusVO;
import com.vote.business.domain.vo.VoteTrendVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;

import java.time.LocalDateTime;

@Mapper
public interface VoteDashboardMapper {
    /**
     * 统计所有活动总数（所有状态）
     */
    @Select("SELECT COUNT(*) FROM vote_info")
    int countTotalVote();

    /**
     * 统计指定日期的投票总数（按创建时间）
     * @param date 日期字符串，格式yyyy-MM-dd
     */
    @Select("SELECT COUNT(*) FROM vote_info WHERE DATE(create_time) = #{date}")
    int countVoteByDate(String date);

    // 按状态统计投票数量（1=进行中）
    @Select("SELECT COUNT(*) FROM vote_info WHERE status = #{status}")
    int countByStatus(int status);

    // 统计总参与人次（所有投票记录中的用户数，不去重则直接count(*)）
    @Select("SELECT COUNT(*) FROM user_vote_record")
    long countTotalParticipants();

    // 统计指定日期范围内的参与人次
    @Select("SELECT COUNT(*) FROM user_vote_record WHERE vote_time BETWEEN #{startTime} AND #{endTime}")
    long countParticipantsByDateRange( @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    // 查询热门投票TOP1（票数最高）
    HotVoteTopVO selectHotVoteTop1();

    // 查询热门投票TOP5
    List<HotVoteTopVO> selectHotVoteTop5();

//    //活动状态分布
//     List<VoteStatusVO> getVoteStatusDistribution();
//
     //查询指定活动的所有选项及票数
      List<VoteOptionRatioVO> selectByVoteId(Long voteId);

    /***
     * 统计指定活动的总票数
     */
    long  countByVoteId(Long voteId);

     //近30天投票创建趋势
     List<VoteTrendVO> selectCreateTrendByDateRange(
             @Param("startTime") LocalDateTime startTime,
             @Param("endTime") LocalDateTime endTime);
}
